package com.ruoyi.gbase.task;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.gbase.domain.TableInfo;
import com.ruoyi.gbase.service.ITableInfoService;
import com.ruoyi.gbase.util.GbaseLoadUtil;
import com.ruoyi.gbase.util.GbaseUtil;
import com.ruoyi.nsh.util.DateUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.sql.ResultSet;
import java.util.List;


/**
 * 定时任务用来更新  IM.DIM_ALLTABLES 里面的 数据量 和 DB2数据量
 *   甚至还可以更新 主键数量 和主键字段
 * @author yys
 * 20211020
 */
@Component("countTask")
public class CountTask
{
    private static final Logger log = LoggerFactory.getLogger(CountTask.class);

    @Autowired
    private ITableInfoService tableInfoService;
    @Autowired
    private GbaseUtil gbaseUtil;
    @Autowired
    private GbaseLoadUtil gbaseLoadUtil;

    /**
     * 自动任务_每天晚上8点自动处理主键 以及 两边字段是否有差异
     */
    public void setZJ()
    {
        log.info("开始执行刷主键任务!");
        TableInfo query = new TableInfo();
        query.setEtlDate(DateUtil.addDay( DateUtils.getdateYYYYMMDD(), -1));
        //根据昨天的日期查询所有的下发表
        List<TableInfo> tableInfoList = tableInfoService.selectTableInfoList(query);
        for(TableInfo t:tableInfoList){
            log.info("开始执行刷主键任务："+t.getTableName() );
            gbaseLoadUtil.updateALLTABLES(t);
        }

    }

    /**
     * 手动任务_更新一次DB2数据的处理
     */
    public void setDB2COUNT()
    {
        log.info("setDB2COUNT进入！");
        TableInfo query = new TableInfo();
        query.setEtlDate(DateUtil.addDay( DateUtils.getdateYYYYMMDD(), -1));
        //根据昨天的日期查询所有的下发表
        List<TableInfo> tableInfoList = tableInfoService.selectTableInfoList(query);

        log.info("setDB2COUNT进入："+tableInfoList.size());
        for(TableInfo t:tableInfoList){
            String schemaName = t.getSchemaName();
            String tableName = t.getTableName();
            //几个没必要统计的就不做了
            if(tableName.toUpperCase().equals("tar_zhqlkhmx_01".toUpperCase())
                    ||tableName.toUpperCase().equals("tar_zhqlzhmx_01".toUpperCase())){
                continue;
            }
            try {
                gbaseUtil.connectGBase();
                String count = "select count(*) num from IM.DIM_ALLTABLES   where DB2COUNTetl_dt='" + DateUtils.getdateYYYYMMDD() + "' and UPPER(TABLE_SCHEMA)='"+schemaName+"' and UPPER(TABLE_NAME)='"+tableName+"' ";
                ResultSet ri1 = gbaseUtil.query(count);
                if (ri1.next()) {
                    if(ri1.getInt(1)>0){
                        log.info("当前表今天已经跑过了："+schemaName+"."+tableName +" 直接跳出……");
                        continue;
                    }
                }
            } catch (Exception e) {
                log.info(schemaName+"."+tableName+"出现了异常，跳出重新处理"+e.toString());
                return ;
            }

            log.info("开始更新DB2数量表："+schemaName+"."+tableName +" 查询数据库中……");
            try {
                //查询到DB2表的数据量
                int db2count = tableInfoService.selectCount(t);
                log.info("表："+schemaName+"."+tableName +"  获取到db2表数据："+db2count );
                String updateSQL = "update IM.DIM_ALLTABLES set DB2COUNTetl_dt='"+DateUtils.getdateYYYYMMDD()+"',db2count="+db2count+" where UPPER(TABLE_SCHEMA)='"+schemaName+"' and UPPER(TABLE_NAME)='"+tableName+"' ";

                gbaseUtil.connectGBase();
                gbaseUtil.update(updateSQL,null);
            } catch (Exception e) {
                log.info(schemaName+"."+tableName+"出现了异常，跳出重新处理"+e.toString());
                continue;
            }

        }




    }



}
